// 统计指定目录中文件总大小。要考虑目录中还有子目录的情况。可以同步编码,异步更好。
const path = require('path')
const fs = require('fs')
const EventEmitter = require('events')

// 1. 输入文件路径
// 2. 判断是否为目录
// 3. 统计文件大小
// 4. 目录循环 如何判断循环结束？
// 5. 返回文件大小

function countFileSize(pathname, cb) {
  let fileSize = 0
  fs.access(pathname, (err) => {
    if (err) {
      // 不存在
      return cb(err)
    } else {
      // 存在
      next(pathname)
    }
  })

  function next(nextPath) {
    // 先判断是文件还是目录
    fs.stat(nextPath, (err, stats) => {
      if (err) {
        return cb(err)
      }
      if (stats.isFile()) {
        return cb(null, stats.size)
      } else {
        fs.readdir(nextPath, (err, files) => {
          if (err) return
          let count = files.length
          if (count === 0) return cb(null, 0)
          for (let i = 0; i < files.length; i++) {
            countFileSize(path.join(nextPath, files[i]), (err, size) => {
              if (err) return cb(err)
              fileSize += size
              if (--count === 0) {
                cb(null, fileSize)
              }
            })
          }
        })
      }
    })
  }
}

console.log(
  countFileSize(
    path.join(path.resolve(__dirname, '..'), '/'),
    (err, size) => {
      if (err) {
        console.log(err)
        return
      }
      console.log(size)
    }
  )
)
